<?php
// for  debug only
error_reporting(E_ALL);
ini_set('display_errors', 1);
// for use
// error_reporting(0);

newsVerzeichnissBestimmen();

// Falls noch nicht installiert, abbrechen!
if (!file_exists(newsOrdner."news_config.php")) die("please install first");

// Datenbank Pfad
define('dataUrl',newsOrdner.'data/');

// set config file
$config = newsOrdner."news_config.php";

// set language
require_once $config;
include newsOrdner."lng/".$sprache.".php";

// use template enginge an set template path
define('templateUrl',newsOrdner.'templates/');
include newsOrdner."lib/template.lib.php";

// BB Code System
include newsOrdner."lib/bbcode.lib.php";

// Zip Libary einbinden
require(newsOrdner."lib/zip.lib.php");

// validation helper
include newsOrdner."lib/validate.lib.php";

// Kommentare
include newsOrdner."news_kommentare.php";

// E-Mail unterstützung
include newsOrdner."lib/mail.lib.php";

// Datum Länderspezifisch Aufbereitung
include newsOrdner."lib/date.lib.php";

// File Operations
include_once(newsOrdner."lib/files.lib.php");

// News
include newsOrdner."news_news.php";

//  Plugins
include_once(newsOrdner."news_plugins.php");


// set database file
if (file_exists(dataUrl."news.dat"))    $news    = dateiLesen(dataUrl."news.dat");    
if (file_exists(dataUrl."newsKom.dat")) $newsKom = dateiLesen(dataUrl."newsKom.dat");


// Aufbauzeit
$_SESSION['microtime'] = explode(' ', microtime());
$_SESSION['microtime'] = $_SESSION['microtime'][1] + $_SESSION['microtime'][0];

// Clear User Input
if (isset($_GET['k'])) $k = htmlspecialchars($_GET['k']);
if (isset($_GET['Anfangsposition'])) $startPosition = htmlspecialchars($_GET['Anfangsposition']);
else $startPosition = 0;

// Smilievorschau per Ajax-Request Anfragen
if (isset($_GET['smilieRequest'])) {
	$smilieRequest = htmlspecialchars($_GET['smilieRequest']);
	die(smilieList(false,"request",$smilieRequest));
}



/*
* H e l f e r
*
*/ 


// set news dir
function newsVerzeichnissBestimmen(){
	$bself = basename(dirname($_SERVER['PHP_SELF']));
		
	if ($bself == "news"){
		$newsOrdner = "";
	} elseif ($bself == "") {
		$newsOrdner = "news/";
	} elseif ($bself == "admin") {
		$newsOrdner = "../";
	} else {
		$newsOrdner = "news/";
	}
	
	define('newsOrdner',$newsOrdner);
}

// Eresetzt Zeichenfolgen wie :-) zu einem Smilie 
// Alle Smilies stehen in smilies.php und können dort
// geändert werden.
function smiliesUmwandeln ($smilieText) {
	global $config;
	include $config;
	$smilieOrdner = newsOrdner."bilder/smilies/".$smiliePack."/";
	include $smilieOrdner."smilies.php";
	foreach($smilies as $smiley => $bild) {
		$smilieText = str_replace($smiley, "<img src='$smilieOrdner$bild' alt='Smilie' />", $smilieText);
	}
	return $smilieText;
}

/**
*
* Listet alle Smilies in einer Tabelle auf 
* wenn true übergebn wird, werden um die Smilies,
* die Links mit dem Javascript geschrieben 
* @param Boolean $links ob um die Smiliebilder ein Link sein soll oder nicht
* @param String $herkunft Je nachdem woher man kommt, arbeitet die Funktion die Smilies anders auf (z.B. request, kommentare)
* @param String $pack Welches Smiliepack ausgegeben werde soll, bei nichts wird das eingestellte Pack ausgeben
*
*/
function smilieList($links,$herkunft="",$pack="") {
	global $config;
	if ($pack == "") include $config;
	else $smiliePack = $pack;
	
	if (!isset($editor)) $editor = "";
	if ($herkunft == "request" )$smilieOrdner = "../bilder/smilies/".$smiliePack."/";
	else $smilieOrdner = newsOrdner."bilder/smilies/".$smiliePack."/";
	
	include newsOrdner."bilder/smilies/".$smiliePack."/smilies.php";
	
	$smilies = array_unique($smilies);
	$zaehler = 0;
	
	$buffer = "<table cellspacing='2' summary='Smilie table' border='0'>";    	
	
	foreach($smilies as $smiley => $bild) {
		$zaehler++;
		
		if($zaehler == 1) $buffer .= "<tr>";
		$buffer .= "<td>";		
		
		// Zellen Inhalt
		$bild = "<img src='$smilieOrdner$bild' border='0' title='$smiley' alt='$smiley' />";		
		if ($editor == "WYSIWYG" && $links && $herkunft != "kommentare") {
			$link = "javascript:tinyMCE.activeEditor.selection.setContent('$smiley')";
			$buffer .= baueLink($link,$bild);
		} else {
			if ($links) {
				$link = "javascript:einfuegen('$smiley','')";
				$buffer .= baueLink($link,$bild);
			} else $buffer .= $bild;
		}
		
		$buffer .= "</td>";
		if ($zaehler == 6) {  $buffer .= "</tr>"; $zaehler = 0; }
	}
	if ($zaehler < 6)  $buffer .= "</tr>";
	$buffer .= "</table>";
	return $buffer;
}

function baueLink($ziel,$inhalt) {
	return "<a href=\"$ziel\">$inhalt</a>";	
}


// Bekommt eine NewsID üergeben und gibt zurück wie Viele Kommentare es zu der übergebenen ID gibt.
function komsize ($newsid) {
	global $newsKom;
	$komsize=0;
	if ( isset($newsid) && count($newsKom) != 0 ) {
		foreach ($newsKom as $line) {
			list ($newsidue, $komid) = explode("\t", $line);
			if ($newsid == $newsidue) $komsize++;
		}
	}
	if ($komsize < 1) $komsize = 0;
	return $komsize;
}

// Ersetzt die Falsch Sonderzeichen durch HTML Enetries
function sonderzeichenErsetzen($zeichenKette) {
	$zeichenKette = str_replace('\t', '  ', $zeichenKette);
	return (htmlspecialchars($zeichenKette, ENT_QUOTES, "UTF-8"));
}


// Prüft ob Kommentare für die übergebene Newsid erlaubt sind.
function allowkom($id) {
	global $news;
	if (isset($id)) {
		foreach ($news as $line) {
			list ($ida, $autor, $titel, $text, $datum, $kom) = explode("\t", $line);
			if ($id == $ida) return string2bool($kom);
		}
	}
}

// gibt das Loginformular aus
function adminformular() {
	// Link je nach Position setzen
	if     (newsOrdner == "../") $link = "index.php";
	elseif (newsOrdner == "")    $link = "admin/index.php";
	else                         $link = "news/admin/index.php";
	$tmp = new Template(templateUrl.'front_login.tpl');
	$tmp->setContent("link",$link);
	echo $tmp->vorlage;
}

// Erstellt einen Link zu einem Popup mit dem Archiv
function archivLink () {
	$tmp = new Template(templateUrl.'front_archiv_link.tpl');
	echo $tmp->vorlage;
}

// Zeigt den Link zum News RSS
function newsRSS() {	
	$tmp = new Template(templateUrl.'front_news_rss_link.tpl');
	$tmp->setContent("newsDir", newsOrdner);
	echo $tmp->vorlage;
}

// Zeigt den Link zum Kommentar RSS
function commentRSS() {
	global $k;
	$tmp = new Template(templateUrl.'front_kommentar_rss_link.tpl');
	$tmp->setContent(array ('id' => $k,'newsDir' => newsOrdner));
	echo $tmp->vorlage;
}

// Zeigt einen Avatar anhand der E-Mail Adresse
function gravatar($email,$size) {
	if ($size==0) $size = 40;
	if (gravatarBenutzen($email)) $url = "http://www.gravatar.com/avatar.php?gravatar_id=".md5(strtolower($email))."&amp;size=".$size;
	else $url = newsOrdner."bilder/ava_default.gif";
	$img =  "<img class='avatar' width='$size' height='$size' alt='avatar' src='$url' />";
	return $img;
}

// Guckt im Userfile ob Gravatar benutzt werden soll
function gravatarBenutzen($email) {
	$userfile = datenbankfileNeuLesen("userfile");
	foreach($userfile as $BenutzerDatenbankReihe) {
		$BenutzerDatenbank = explode("\t",$BenutzerDatenbankReihe);
		if (strpos($BenutzerDatenbankReihe,"<?") !== false) continue;
		//if (eregi("<\?",$BenutzerDatenbankReihe)) continue;
		if ("" == trim($BenutzerDatenbankReihe)) continue;
		if ($email != trim($BenutzerDatenbank[2])) continue;
		return string2bool($BenutzerDatenbank[4]);
	}
}

// Liest ein Datenbankdatei neu ein (nur beim speichern nötig)
function datenbankfileNeuLesen($file) {
	if ($file == "userfile") return dateiLesen(dataUrl."user.php");
	return dateiLesen(dataUrl.$file.".dat");
}

// Aufbauzeit
function buildTime() {
	$temp = explode(' ', microtime());
	$temp = ($temp[1] + $temp[0]) - $_SESSION['microtime'];
	return BUILD_TIME.': ' . round($temp, 4) ." ". SECONDS;
}

// Teilt aus Sicherheitsgründen zu lange Wörter anhand der ügebenen Länge
function shortWords($eintrag, $length) {
	$words = explode(" ",$eintrag);
	$count_w = count($words)-1;
	if($count_w >= 0) {
		for($i=0;$i<=$count_w;$i++) {
			if(strlen($words[$i])>=$length) {
				$words[$i] = chunk_split($words[$i], $length," ");
				$length = strlen($words[$i])-5;
				$words[$i] = substr($words[$i],0,$length);
			}
			$eintrag = implode(" ",$words);
		}
	} else
		$eintrag = chunk_split($eintrag,$length," ");
	return $eintrag;
}

function clearInput($text) {
	// Lerzeichen am Ende und Anfang entfernen
	$text = trim($text);
	// Sonderzeichen in HTML Eneties ersetzen (& -> &amp;)
	$text = sonderzeichenErsetzen($text);
	//Zeilenumbrüche in HTML Breaks umwandeln (<br />)
	$text = preg_replace("/(\015\012)|(\015)|(\012)/","<br />",$text);
	// zu lange Wörter trennen mit Lücke trennen
	$text = shortWords($text,50);
	return $text;
}





function StartsWith($Haystack, $Needle){
    return strpos($Haystack, $Needle) === 0;
}


function string2bool ($string) {
	$string = trim ($string);
	if     ($string == "true") return true;
	elseif ($string == "false") return false;
	else return false;
}

// Angelehnt an die shell
function int2bool ($int) {
	if ($int == 0) return true;
	else return false;
}

?>
